#include "semephore_try.h"

// 初始化一个全局信号量
sem_t sem;					//全局信号量

void *func1(void *arg)
{
    sem_wait(&sem);			//等待信号量
    int *running = (int *)arg;
    printf("thread func1 running : %d\n", *running);
    pthread_exit(NULL);
}

void *func2(void *arg)
{
    printf("thread func2 running.\n");
    sem_post(&sem);			//发送信号量
    pthread_exit(NULL);
}

int main(int argc, char * argv[])
{
    printf("==================主线程开始==================\n");
    int a = 3;
    // == sem_init 用于初始化信号量
    // == 第一个参数是指向信号量的指针
    // == 第二个参数是指定信号量的类型，如果是0则为当前进程的局部信号量，如果是1则可以在多个进程间共享
    // == 第三个参数是指定信号量的初始值
    // == 初始化成功则返回0，失败返回-1
    if (sem_init(&sem, 0, 0) == -1){
        printf("信号量初始化失败, 结束运行......\n");
        return -1;
    }

    pthread_t thread_id[2];
    
    pthread_create(&thread_id[0], NULL, func1, (void *)&a);		//线程1
    printf("main thread running.\n");
    sleep(5);
    pthread_create(&thread_id[1], NULL, func2, (void *)&a);		//线程2
    printf("main thread still running.\n");
    pthread_join(thread_id[0], NULL);		
    pthread_join(thread_id[1], NULL);
    sem_destroy(&sem);				//销毁信号量
    printf("==================主线程结束==================\n");
    return 0;
}